<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .wrap {
            width: 300px;
            margin: 100px auto 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 300px;
        }

        th,
        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }

        th {
            background-color: #09c;
            font: bold 16px "微软雅黑";
            color: #fff;
        }

        td {
            font: 14px "微软雅黑";
        }

        tbody tr {
            background-color: #f0f0f0;
        }

        tbody tr:hover {
            cursor: pointer;
            background-color: #fafafa;
        }
    </style>

</head>
<body>
<div class="wrap">
    <table>
        <thead>
        <tr>
            <th>
                <input type="checkbox" id="j_cbAll"/>
            </th>
            <th>商品</th>
            <th>价钱</th>
        </tr>
        </thead>
        <tbody id="j_tb">
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPhone8</td>
            <td>8000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Pro</td>
            <td>5000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Air</td>
            <td>2000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>Apple Watch</td>
            <td>2000</td>
        </tr>

        </tbody>
    </table>
    <input type="button" value="  反 选  " id="btn">
</div>
<script>
    // 1 全选
    // 1.1 获取父checkbox，注册点击事件
    // 1.2 找到所有子的checkbox，让这些checkbox的状态跟父checkbox保持一致
    // 让子的checkbox的选中状态，和父checkbox的选中状态一致
    // 2 当点击子的checkbox，如果所有的子的checkbox都被选中了，让父的checkbox也选中
    // 如果有一个子的checkbox没有被选中，父的checkbox也不被选中
    // 3 反选
    var j_cbAll = document.getElementById("j_cbAll");
    var j_tb = document.getElementById("j_tb");
    var inputs = j_tb.getElementsByTagName("input");
    j_cbAll.onclick = function () {
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            if (input.type === "checkbox") {
                input.checked = this.checked;
            }
        }
    }

    for (var i = 0; i < inputs.length; i++) {
        var input = inputs[i];
        //第一次循环是让所有的input注册 绑定事件
        input.onclick = function () {
            checkAll();
        }
    }
    function checkAll(){
        var isAllChecked = true;

        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            //注册绑定事件里的循环是判断 我选定一个的时候 其他有没有被选中
            //只要一个没被选择 返回是false
            if (!input.checked) {
                isAllChecked = false;
                break;
            }
        }
        j_cbAll.checked = isAllChecked;
    }

    var btn=document.getElementById("btn");
    btn.onclick= function () {
        for(var i=0;i<inputs.length;i++){
            var input=inputs[i];
            input.checked=!input.checked;
            checkAll();
        }
    }
</script>

</body>
</html>
